package com.yonyougov.devops.cruxcisupport.k8s.pod;

import com.yonyougov.devops.cruxcisupport.k8s.error.K8sConfIgNotFindException;
import io.fabric8.kubernetes.api.model.Pod;
import io.fabric8.kubernetes.client.KubernetesClient;

import java.util.List;

/**
 * k8s Pod 相关的API
 */
public interface PodRepository {

    /**
     *获取某个命名空间下某个应用的pod信息
     * @param nameSpace 命名空间
     * @param podName pod名称
     * @return Pod
     * @throws K8sConfIgNotFindException
     */
    Pod get(String nameSpace, String podName) throws K8sConfIgNotFindException;

    /**
     *获取某个命名空间下某个应用的pod信息
     * @param client 客户端
     * @param nameSpace 命名空间
     * @param podName pod名称
     * @return Pod
     */
    Pod get(KubernetesClient client, String nameSpace, String podName);

    /**
     * 获取某个命名空间下某个应用的pod名称
     * @param nameSpace 命名空间
     * @param appName 应用名称
     * @return List<String> pod名称
     */
    List<String> getPodNames(String nameSpace, String appName) throws K8sConfIgNotFindException;

    /**
     * 获取某个命名空间下某个应用的pod名称
     * @param client 客户端
     * @param nameSpace 命名空间
     * @param appName 应用名称
     * @return List<String> pod名称
     */
    List<String> getPodNames(KubernetesClient client,String nameSpace, String appName);

    /**
     * 判断pod是否处于运行状态 仅支持pod中有一个容器的判断
     * @param nameSpace 命名空间
     * @param podName 应用名称
     * @return boolean
     * @throws K8sConfIgNotFindException
     */
    boolean isRunning(String nameSpace, String podName) throws K8sConfIgNotFindException;

    /**
     * 判断pod是否处于运行状态 仅支持pod中有一个容器的判断
     * @param client 客户端
     * @param nameSpace 命名空间
     * @param podName 应用名称
     * @return boolean
     * @throws K8sConfIgNotFindException
     */
    boolean isRunning(KubernetesClient client, String nameSpace, String podName);

    /**
     * 获取pod信息
     * @param nameSpace 命名空间
     * @return List<PodStatusInfo>
     * @throws K8sConfIgNotFindException
     */
    List<PodStatusInfo> getAllPodStatusInfo(String nameSpace) throws K8sConfIgNotFindException;

    /**
     * 获取pod信息
     * @param client 客户端
     * @param nameSpace 命名空间
     * @return List<PodStatusInfo>
     */
    List<PodStatusInfo> getAllPodStatusInfo(KubernetesClient client,String nameSpace);


    /**
     * 删除pod
     * @param nameSpace 命名空间
     * @param podName pod名称
     * @return boolean
     * @throws K8sConfIgNotFindException
     */
    boolean delete(String nameSpace, String podName) throws K8sConfIgNotFindException;


    /**
     * 删除pod
     * @param client 客户端
     * @param nameSpace 命名空间
     * @param podName 应用名称
     * @return boolean
     * @throws K8sConfIgNotFindException
     */
    boolean delete(KubernetesClient client, String nameSpace, String podName);

}
